export default {
    computed: {
        nowStatus() {
            return this.menuRecord && this.menuRecord.plannableStatus
        },
        isEdit() {
            /* 锁住，第一个节点，状态 == 待审核 或 已完成，没有编辑权限  ----> 编辑置灰 */
            return this.isClock() || this.isFirstNode() || this.nowStatus !== 'SCHEDULED' || this.menuRecord.activityType == 'WBS'
        },
        isLook() {
            /* 第一个节点 ----> 查看置灰 */
            return this.isFirstNode()
        },
        isEditPerson() {
            /* 第一个节点 ----> 查看置灰 */
            return this.isFirstNode()
        },
        isPush() {
            // 发布权限
            if (this.$store.state.planTable.hasSelectData.length == 0) {
              return this.isClock() || this.isFirstNode() || this.nowStatus !== 'SCHEDULED' || this.menuRecord.activityType == 'WBS'
            } else {
              return this.$store.state.planTable.hasSelectData.some(item => {
                return this.isClock(item) || this.isFirstNode(item) || item.plannableStatus !== 'SCHEDULED' || this.menuRecord.activityType == 'WBS'
              })
            }
            /* 锁住，第一个节点，状态 !== 已发布 ----> 发布置灰 */
        },
        isRevoke() {
            if (this.$store.state.planTable.hasSelectData.length == 0) {
              return this.isClock() || this.isFirstNode() || this.nowStatus == 'SCHEDULED' || this.nowStatus == 'COMPLETED'
            } else {
              return this.$store.state.planTable.hasSelectData.some(item => {
                return this.isClock(item) || this.isFirstNode(item) || item.plannableStatus == 'SCHEDULED' || item.plannableStatus == 'COMPLETED'
              })
            }
            /* 锁住， 第一个节点， 状态 !== 已发布-- -- > 发布置灰 */
        },
        isFrontTask() {
            /* 锁住， 第一个节点， 状态 !== 已发布-- -- > 发布置灰 */
            return this.isClock() || this.isFirstNode() || this.menuRecord.activityType == 'WBS' || this.nowStatus != 'SCHEDULED'
        },
        isDelete() {
            if (this.$store.state.planTable.hasSelectData.length == 0) {
                return this.showSource.length == 1 || this.isClock() || this.isFirstNode() || this.menuRecord.notDeleteable
            } else {
              return this.$store.state.planTable.hasSelectData.some(item => {
                return this.showSource.length == 1 || this.isClock(item) || this.isFirstNode(item) || item.notDeleteable
              })
            }
            /* 表格数据唯一的， 锁住，第一个节点, 能删权限 ----> ，删除置灰 */
        },
        isAddTask(){
            return this.isFirstNode() || this.isClock()
        },
        isChildProject() {
            /* 锁住，状态 == 待审核 或 已完成，没有编辑权限 ---> 子节点按钮置灰 */
            return this.isClock() || this.nowStatus === 'PENDINGAPPROVAL' || this.nowStatus === 'COMPLETED' 
        },
        isUp() {
            /* 第一个节点，锁住，状态==待审核 或 已完成 ; 为根节点下的第一层不允许升级---> 升级按钮置灰 */
            let nowDataLevel = false
            if (this.menuRecord && this.menuRecord.parentIds.length <= 1) {
                nowDataLevel = true
            }
            return this.isFirstNode() || this.isClock() || this.nowStatus === 'PENDINGAPPROVAL' || this.nowStatus === 'COMPLETED' || nowDataLevel
        },
        isDown() {
            if (this.menuRecord) {
                // 1.当前节点下面没有子节点
                let parentArr = this.menuRecord.parentIds
                let parentId = parentArr[parentArr.length - 1]
                let parentData = this.$store.state.planTable.planTable.filter(v => v.id === parentId)[0]
                //同级节点
                let brotherChild = this.$store.state.planTable.planTable.filter(item => JSON.stringify(item.parentIds) == JSON.stringify(parentArr))
                let downPermission = null
                /**
                 * 1. 在有子元素的情况下， 判断当前元素是否有同级节点， 有 - > 3, 无 - > 置灰；
                 * 2. 判断当前子元素在父元素下的子元素数组中的索引， 索引>0 --> 4， <0 --> 置灰
                 * 3. 在当前元素有平行任务且当前元素不在第一个的情况下， 判断当前元素的上一个兄弟元素的状态， PENDINGAPPROVAL || COMPLETED --> 置灰，其他-->选中
                 */
                if (parentData == undefined || brotherChild.length <= 1) {
                    // true 置灰
                    downPermission = true
                } else {
                    let index = brotherChild.findIndex(item => item.id === this.menuRecord.id)
                    if (index > 0) {
                        if (brotherChild[index - 1].plannableStatus === 'PENDINGAPPROVAL' || brotherChild[index - 1].plannableStatus === 'COMPLETED') {
                            // true 置灰
                            downPermission = true
                        } else {
                            // fasle 不置灰
                            downPermission = false
                        }
                    } else {
                        // true 置灰
                        downPermission = true
                    }
                }
                return downPermission
            }
            /* 第一个节点，锁住，状态==待审核 或 已完成 ---> 升级按钮置灰*/
            return this.isFirstNode() || this.isClock() || this.nowStatus === 'PENDINGAPPROVAL' || this.nowStatus === 'COMPLETED'
        },
        isShear() {
            if (this.$store.state.planTable.hasSelectData.length == 0) {
              /* 第一个节点，锁住，状态==待审核 或 已完成 ---> 升级按钮置灰*/
              return this.isClock() || this.isFirstNode() || this.nowStatus !== 'SCHEDULED'
            }else {
                //因为可以多个一起剪切所有都要判断
                return this.$store.state.planTable.hasSelectData.some(item => {
                    return this.isClock(item) ||
                        this.isFirstNode(item) ||
                        item.plannableStatus !== 'SCHEDULED'
                })
            }
        },
        isRestart() {
            return this.isFirstNode() || this.nowStatus != 'COMPLETED'
        },
        getActionPerssion() {
            return this.menuRecord && this.menuRecord.actionPerssion
        }
    },
    methods: {
        isClock(item = null) {
          if (item)
            return item && item['lock.locked'] && item['lock.locked'] != null
          else
            return this.menuRecord && this.menuRecord['lock.locked'] && this.menuRecord['lock.locked'] != null
        },
        isFirstNode(item = null) {
            if (item)
              return item && item.parentIds.length == 0
            else
              return this.menuRecord && this.menuRecord.parentIds.length == 0
        },
        //什么情况下不能点击
        getLimit(key) {
            if (!this.getActionPerssion && key != '查看任务')
                return true
            switch(key) {
                case '编辑任务':
                    return this.isEdit
                case '批量编辑':
                    return this.isEditPerson
                case '查看任务':
                    return this.isLook
                case '发布任务':
                    return this.isPush
                case '撤销发布任务':
                    return this.isRevoke
                case '前置任务':
                    return this.isFrontTask
                case '删除任务':
                    return this.isDelete
                case '锁定':
                    return this.isFirstNode()
                case '插入平行任务':
                    return this.isAddTask
                case '插入子任务':
                    return this.isChildProject
                case '升级':
                    return this.isUp
                case '降级':
                    return this.isDown
                case '复制':
                    return this.isFirstNode()
                case '剪切':
                    return this.isShear
                case '粘贴':
                    return this.copyData.data.length == 0 || this.isFirstNode()
                case '重启任务':
                    return this.isRestart
            }
        }
    }
}